/*
 * @Author: wuyang
 * @Description: 登录页面验证规则
 * @Date: 2023-01-04 16:51:25
 * @LastEditors: wuyang
 * @LastEditTime: 2023-01-05 16:25:50
 * @FilePath: \vue-ts-vite\src\views\login\utils\rules.ts
 */
import { reactive } from "vue";
import type { FormRules } from "element-plus";
import { useUserStore } from "@/store/modules/user";

const userStore = useUserStore();

/** 账号正则（密码格式应为6-18位数字、字母、符号的任意两种组合） */
export const REGEXP_USERNAME = /^[a-zA-Z0-9_-]{4,16}$/;

/** 邮箱正则（密码格式应为6-18位数字、字母、符号的任意两种组合） */
export const REGEXP_EMAIL =
  /^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$/;

/** 密码正则（密码格式应为6-18位数字、字母、符号的任意两种组合） */
export const REGEXP_PWD =
  /^(?![0-9]+$)(?![a-z]+$)(?![A-Z]+$)(?!([^(0-9a-zA-Z)]|[()])+$)(?!^.*[\u4E00-\u9FA5].*$)([^(0-9a-zA-Z)]|[()]|[a-z]|[A-Z]|[0-9]){6,18}$/;

/** 手机号正则 */
export const REGEXP_PHONE =
  /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/;

/** 登录校验 */
const loginRules = reactive(<FormRules>{
  /** 账号校验 */
  username: [
    {
      validator: (rule, value, callback) => {
        if (value === "") {
          callback(new Error("请输入账号"));
        } else if (!REGEXP_USERNAME.test(value)) {
          callback(
            new Error(
              "请输入4到16位的账号,（字母，数字，下划线，减号）任意组合"
            )
          );
        } else {
          callback();
        }
      },
      trigger: "blur",
    },
  ],

  // 密码校验
  password: [
    {
      validator: (rule, value, callback) => {
        if (value === "") {
          callback(new Error("请输入密码"));
        } else if (!REGEXP_PWD.test(value)) {
          callback(
            new Error("密码格式应为6-18位数字、字母、符号的任意两种组合")
          );
        } else {
          callback();
        }
      },
      trigger: "blur",
    },
  ],
  /** 验证码校验 */
  captcha: [
    {
      validator: (rule, value, callback) => {
        if (value === "") {
          callback(new Error("请输入4位验证码"));
        } else {
          if (value == userStore.captcha) {
            callback();
          } else {
            callback(new Error("验证码错误"));
          }
        }
      },
    },
  ],
});

/** 注册校验 */
const registerRules = reactive(<FormRules>{
  /** 账号校验 */
  username: [
    {
      validator: (rule, value, callback) => {
        if (value === "") {
          callback(new Error("请输入账号"));
        } else if (!REGEXP_USERNAME.test(value)) {
          callback(
            new Error(
              "请输入4到16位的账号,（字母，数字，下划线，减号）任意组合"
            )
          );
        } else {
          callback();
        }
      },
      trigger: "blur",
    },
  ],
  /** 邮箱校验 */
  email: [
    {
      validator: (rule, value, callback) => {
        if (value === "") {
          callback(new Error("请输入邮箱"));
        } else if (!REGEXP_EMAIL.test(value)) {
          callback(new Error("请输入正确的邮箱格式"));
        } else {
          callback();
        }
      },
      trigger: "blur",
    },
  ],
  /** 密码校验 */
  password1: [
    {
      validator: (rule, value, callback) => {
        if (value === "") {
          callback(new Error("请输入密码"));
        } else if (!REGEXP_PWD.test(value)) {
          callback(
            new Error("密码格式应为6-18位数字、字母、符号的任意两种组合")
          );
        } else {
          callback();
        }
      },
      trigger: "blur",
    },
  ],
  /** 密码校验 */
  password2: [
    {
      validator: (rule, value, callback) => {
        if (value === "") {
          callback(new Error("请输入密码"));
        } else if (!REGEXP_PWD.test(value)) {
          callback(
            new Error("密码格式应为6-18位数字、字母、符号的任意两种组合")
          );
        } else {
          callback();
        }
      },
      trigger: "blur",
    },
  ],
  /** 验证码校验 */
  captcha: [
    {
      validator: (rule, value, callback) => {
        if (value.trim().length !== 6) {
          callback(new Error("请输入6位验证码"));
        } else {
          callback();
        }
      },
    },
  ],
});

export { loginRules, registerRules };
